package com.zjsru.oneday202208;

import java.util.Arrays;

/**
 * @Author: likew
 * @Date: 2022/8/3
 *
 * 给定一个字符串 s 和一个整数 k。你可以从 s 的前 k 个字母中选择一个，并把它加到字符串的末尾。
 *
 * 返回 在应用上述步骤的任意数量的移动后，字典上最小的字符串。
 * 输入：s = "cba", k = 1
 * 输出："acb"
 * 解释：
 * 在第一步中，我们将第一个字符（“c”）移动到最后，获得字符串 “bac”。
 * 在第二步中，我们将第一个字符（“b”）移动到最后，获得最终结果 “acb”。
 *
 */
public class OrderlyQueue {
    public String orderlyQueue(String s, int k) {
        char[] cs = s.toCharArray();
        if(k == 1){
            int i = 0, j = 1, _k = 0, n = cs.length;
            while(i < n && j < n && _k < n){
                char a = cs[(i + _k) % n], b = cs[(j + _k) % n];
                if(a == b){
                    _k++;
                }else {
                    if(a > b) {
                        i += _k + 1;
                    }else {
                        j += _k + 1;
                    }
                    if(i == j){
                        i++;
                    }
                    _k = 0;
                }
            }
            i = Math.min(i, j);
            return s.substring(i) + s.substring(0,i);
        }else{
            Arrays.sort(cs);
            return String.valueOf(cs);
        }
    }
    
    public static void main(String[] args) {
        OrderlyQueue orderlyQueue = new OrderlyQueue();
        String s = "cba";
        int k = 1;
        System.out.println(orderlyQueue.orderlyQueue(s, k));
    }
}
